import request from '@/utils/request'
import { ElMessage } from 'element-plus'
import logger from '@/utils/logger'

// 参数验证函数
const validateField = (data) => {
  if (!data.name?.trim()) {
    throw new Error('字段名称不能为空')
  }
  if (!data.field_name?.trim()) {
    throw new Error('字段标识不能为空')
  }
}

export const fieldApi = {
  // 获取字段列表
  async getFields(params) {
    try {
      logger.debug('获取字段列表', { params })
      const response = await request({
        url: '/api/fields',
        method: 'get',
        params
      })
      logger.debug('获取字段列表成功', { data: response.data })
      return response
    } catch (error) {
      logger.error('获取字段列表失败', { error, params })
      ElMessage.error('获取字段列表失败：' + error.message)
      throw error
    }
  },

  // 创建字段
  async createField(data) {
    try {
      logger.debug('创建字段', { data })
      validateField(data)
      const response = await request({
        url: '/api/fields',
        method: 'post',
        data
      })
      logger.debug('创建字段成功', { id: response.data?.id })
      return response
    } catch (error) {
      logger.error('创建字段失败', { error, data })
      ElMessage.error('创建字段失败：' + error.message)
      throw error
    }
  },

  // 更新字段
  async updateField(id, data) {
    try {
      logger.debug('更新字段', { id, data })
      validateField(data)
      const response = await request({
        url: `/api/fields/${id}`,
        method: 'put',
        data
      })
      logger.debug('更新字段成功', { id })
      return response
    } catch (error) {
      logger.error('更新字段失败', { error, id, data })
      ElMessage.error('更新字段失败：' + error.message)
      throw error
    }
  },

  // 删除字段
  async deleteField(id) {
    try {
      logger.debug('开始删除字段', { id })
      if (id === 1) {
        throw new Error('系统字段不能删除')
      }
      const response = await request({
        url: `/api/fields/${id}`,
        method: 'delete'
      })
      logger.debug('删除字段请求返回', { 
        id,
        response,
        status: response.status,
        message: response.message
      })
      
      // 检查响应状态
      if (response.code !== 200) {
        throw new Error(response.message || '删除失败')
      }
      
      return response
    } catch (error) {
      logger.error('删除字段失败', { 
        error, 
        id,
        response: error.response,
        status: error.response?.status,
        message: error.message
      })
      throw error
    }
  },

  // 获取单个字段
  async getField(id) {
    try {
      logger.debug('获取单个字段', { id })
      const response = await request({
        url: `/api/fields/${id}`,
        method: 'get'
      })
      logger.debug('获取单个字段成功', { data: response.data })
      return response
    } catch (error) {
      logger.error('获取单个字段失败', { error, id })
      ElMessage.error('获取单个字段失败：' + error.message)
      throw error
    }
  }
}
